home *** CD-ROM | disk | FTP | other *** search
/ NetNews Offline 2 / NetNews Offline Volume 2.iso / news / comp / lang / c++-part1 / 4387 < prev    next >
Encoding:
Text File  |  1996-08-06  |  3.5 KB  |  188 lines

  1. Path: ulowell.uml.edu!aspen!ferriom
  2. From: ferriom@aspen
  3. Newsgroups: comp.lang.c++
  4. Subject: Why C++ sucks++
  5. Date: 29 Jan 96 22:33:57 -0500
  6. Organization: University of Massachusetts Lowell
  7. Message-ID: <1996Jan29.223357.1@aspen>
  8. NNTP-Posting-Host: aspen.uml.edu
  9.  
  10.  
  11.  
  12. *** HIGH SCHOOL ***
  13.  
  14. 100  PRINT "Hello World."
  15. 999  END
  16.  
  17.  
  18.  
  19. *** COLLEGE FRESHMAN ***
  20.  
  21.        WRITE (6, 100)
  22.   100  FORMAT (1X, 'Hello World.')
  23.        END
  24.  
  25.  
  26.  
  27. *** ADVANCED COLLEGE ***
  28.  
  29. PROGRAM P1(INPUT, OUTPUT);
  30.  
  31. BEGIN
  32. WRITELN(OUTPUT, 'Hello World.');
  33. END.
  34.  
  35.  
  36.  
  37. *** RECENT COLLEGE GRADUATE ***
  38.  
  39.        IDENTIFICATION DIVISION.
  40.        PROGRAM-ID.
  41.            P1.
  42.  
  43.        ENVIRONMENT DIVISION.
  44.  
  45.        DATA DIVISION.
  46.        WORKING-STORAGE SECTION.
  47.        01 MESSAGE-RECORD                     PICTURE X(12).
  48.  
  49.        PROCEDURE DIVISION.
  50.        PROGRAM-BEGIN.
  51.        FIRST-PARAGRAPH.
  52.            MOVE 'Hello World.' TO MESSAGE-RECORD.
  53.            DISPLAY MESSAGE-RECORD.
  54.        PROGRAM-DONE.
  55.            STOP RUN.
  56.  
  57.  
  58.  
  59. *** SEASONED PROFESSIONAL ***
  60.  
  61. #include <iostream.h>
  62. #include <string.h>
  63.  
  64.  
  65. class String
  66. {
  67.  public:
  68.   String();
  69.   String(const char *const);
  70.   String(const String &);
  71.   ~String();
  72.   char & operator[](unsigned short offset);
  73.   char operator[](unsigned short offset) const;
  74.   String operator+(const String&);
  75.   void operator+=(const String&);
  76.   String & operator= (const String &);
  77.   unsigned short GetLen()const {return itsLen; }
  78.   const char * GetString() const {return itsString; }
  79.  private:
  80.   String (unsigned short);
  81.   char * itsString;
  82.   unsigned short itsLen;
  83. };
  84.  
  85.  
  86. String::String()
  87. {
  88.  itsString = new char[1];
  89.  itsString[0] = '\0';
  90.  itsLen = 0;
  91. }
  92.  
  93. String::String(unsigned short len)
  94. {
  95.  itsString = new char[len + 1];
  96.  for (unsigned short i = 0;  i <= len;  i++)
  97.   itsString[i] = '\0';
  98.  itsLen = len;
  99. }
  100.  
  101. String::String(const char * const cString)
  102. {
  103.  itsLen = strlen(cString);
  104.  itsString = new char[itsLen + 1];
  105.  for (unsigned short i = 0;  i < itsLen;  i++)
  106.   itsString[i] = cString[i];
  107.  itsString[itsLen] = '\0';
  108. }
  109.  
  110. String::String(const String & rhs)
  111. {
  112.  itsLen = rhs.GetLen();
  113.  itsString = new char[itsLen + 1];
  114.  for (unsigned short i = 0;  i < itsLen;  i++)
  115.   itsString[i] = rhs[i];
  116.  itsString[itsLen] = '\0';
  117. }
  118.  
  119. String::~String()
  120. {
  121.  delete [] itsString;
  122.  itsLen = 0;
  123. }
  124.  
  125. String& String::operator=(const String & rhs)
  126. {
  127.  if (this == &rhs)
  128.   return *this;
  129.  delete [] itsString;
  130.  itsLen = rhs.GetLen();
  131.  itsString = new char[itsLen + 1];
  132.  for (unsigned short i = 0;  i < itsLen;  i++)
  133.   itsString[i] = rhs[i];
  134.  itsString[itsLen] = '\0';
  135.  return *this;
  136. }
  137.  
  138. char & String::operator[](unsigned short offset)
  139. {
  140.  if (offset > itsLen)
  141.   return itsString[itsLen - 1];
  142.  else
  143.  return itsString[offset];
  144. }
  145.  
  146. char String::operator[](unsigned short offset) const
  147. {
  148.  if (offset > itsLen)
  149.   return itsString[itsLen - 1];
  150.  else
  151.   return itsString[offset];
  152. }
  153.  
  154. String String::operator+(const String& rhs)
  155. {
  156.  unsigned short totalLen = itsLen + rhs.GetLen();
  157.  String temp(totalLen);
  158.  for (unsigned short i = 0;  i < itsLen;  i++)
  159.   temp[i] = itsString[i];
  160.  for (unsigned short j = 0;  j < rhs.GetLen();  j++, i++)
  161.   temp[i] = rhs[j];
  162.  temp[totalLen] = '\0';
  163.  return temp;
  164. }
  165.  
  166. void String::operator+=(const String& rhs)
  167. {
  168.  unsigned short rhsLen = rhs.GetLen();
  169.  unsigned short totalLen = itsLen + rhsLen;
  170.  String temp(totalLen);
  171.  for (unsigned short i = 0;  i < itsLen;  i++)
  172.   temp[i] = itsString[i];
  173.  for (unsigned short j = 0;  j < rhs.GetLen();  j++,  i++)
  174.   temp[i] = rhs[i - itsLen];
  175.  temp[totalLen] = '\0';
  176.  *this = temp; 
  177. }
  178.  
  179.  
  180. main()
  181. {
  182.  String s1("Hello");
  183.  String s2(" ");
  184.  String s3("World.");
  185.  String s4 = s1 + s2 + s3;
  186.  cout << s4.GetString() << endl;
  187. }
  188.